package com.sky.orangehireserver.modules.job_seeker.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.sky.orangehireserver.modules.job_seeker.dto.SeekerJobQueryDTO;
import com.sky.orangehireserver.modules.job_seeker.vo.SeekerJobBriefVO;
import com.sky.orangehireserver.modules.job_seeker.vo.SeekerJobVO;

import java.util.List;
import java.util.Map;

/**
 * 求职者岗位查询服务接口
 * 
 * @author sky
 */
public interface SeekerJobService {

    /**
     * 分页查询岗位列表
     * 
     * @param queryDTO 查询条件DTO
     * @return 分页岗位简要信息
     */
    IPage<SeekerJobBriefVO> getJobPage(SeekerJobQueryDTO queryDTO);

    /**
     * 根据ID获取岗位详情
     * 
     * @param jobId 岗位ID
     * @return 岗位详细信息VO
     */
    SeekerJobVO getJobById(Long jobId);

    /**
     * 获取热门岗位列表
     * 
     * @param limit 数量限制
     * @return 热门岗位列表
     */
    List<SeekerJobBriefVO> getHotJobs(Integer limit);

    /**
     * 获取最新岗位列表
     * 
     * @param limit 数量限制
     * @return 最新岗位列表
     */
    List<SeekerJobBriefVO> getLatestJobs(Integer limit);

    /**
     * 根据企业ID获取岗位列表
     * 
     * @param orgId 企业ID
     * @param current 当前页
     * @param size 每页大小
     * @return 分页岗位信息
     */
    IPage<SeekerJobBriefVO> getJobsByOrgId(Long orgId, Long current, Long size);

    /**
     * 根据城市获取岗位列表
     * 
     * @param location 城市
     * @param current 当前页
     * @param size 每页大小
     * @return 分页岗位信息
     */
    IPage<SeekerJobBriefVO> getJobsByLocation(String location, Long current, Long size);

    /**
     * 根据标签获取岗位列表
     * 
     * @param tag 标签
     * @param current 当前页
     * @param size 每页大小
     * @return 分页岗位信息
     */
    IPage<SeekerJobBriefVO> getJobsByTag(String tag, Long current, Long size);

    /**
     * 增加岗位浏览次数
     * 
     * @param jobId 岗位ID
     */
    void incrementViewsCount(Long jobId);

    /**
     * 获取岗位统计信息
     * 
     * @return 统计信息
     */
    Map<String, Object> getJobStatistics();

    /**
     * 获取热门搜索关键词
     * 
     * @param limit 数量限制
     * @return 热门关键词列表
     */
    List<String> getHotSearchKeywords(Integer limit);

    /**
     * 获取推荐岗位（基于用户浏览历史等）
     * 
     * @param userId 用户ID
     * @param limit 数量限制
     * @return 推荐岗位列表
     */
    List<SeekerJobBriefVO> getRecommendedJobs(Long userId, Integer limit);
}
